﻿using System;
/// <summary>
/// 1. 模式的结构
/// 适配器模式（Adapter）包含以下主要角色。 
/// 目标（Target）接口：当前系统业务所期待的接口，它可以是抽象类或接口。
/// 适配者（Adaptee）类：它是被访问和适配的现存组件库中的组件接口。
/// 适配器（Adapter）类：它是一个转换器，通过继承或引用适配者的对象，把适配者接口转换成目标接口，让客户按目标接口的格式访问适配者。
/// 
/// 
/// 在不改变逻辑的情况下，使类兼容接口。
/// 
/// 适配器模式分为类结构型模式和对象结构型模式两种，前者类之间的耦合度比后者高，
/// 且要求程序员了解现有组件库中的相关组件的内部结构，所以应用相对较少些。
/// </summary>
namespace Adapter
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("类适配器模式测试：");
            ITarget target = new ClassAdapter();
            target.request();

            Console.WriteLine("对象适配器模式测试：");
            Adaptee adaptee = new Adaptee();
            ITarget target2 = new ObjectAdapter(adaptee);
            target2.request();
        }
    }
    //目标接口
    interface ITarget
    {
        public void request();
    }
    //适配者接口
    class Adaptee
    {
        public void specificRequest()
        {
            Console.WriteLine("适配者中的业务代码被调用！");
        }
    }
    //类适配器类

    class ClassAdapter : Adaptee, ITarget
    {
        public void request()
        {
            specificRequest();
        }
    }

    //对象适配器类
    class ObjectAdapter : ITarget
    {
        private Adaptee adaptee;
        public ObjectAdapter(Adaptee adaptee)
        {
            this.adaptee = adaptee;
        }
        public void request()
        {
            adaptee.specificRequest();
        }
    }

}
